/*
 * Copyright 2010-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.amazonaws.services.comprehend.model.transform;

import com.amazonaws.services.comprehend.model.*;
import com.amazonaws.transform.SimpleTypeJsonUnmarshallers.*;
import com.amazonaws.transform.*;
import com.amazonaws.util.json.AwsJsonReader;

/**
 * JSON unmarshaller for response ClassifyDocumentResult
 */
public class ClassifyDocumentResultJsonUnmarshaller implements
        Unmarshaller<ClassifyDocumentResult, JsonUnmarshallerContext> {

    public ClassifyDocumentResult unmarshall(JsonUnmarshallerContext context) throws Exception {
        ClassifyDocumentResult classifyDocumentResult = new ClassifyDocumentResult();

        AwsJsonReader reader = context.getReader();
        reader.beginObject();
        while (reader.hasNext()) {
            String name = reader.nextName();
            if (name.equals("Classes")) {
                classifyDocumentResult.setClasses(new ListUnmarshaller<DocumentClass>(
                        DocumentClassJsonUnmarshaller.getInstance()
                        )
                                .unmarshall(context));
            } else if (name.equals("Labels")) {
                classifyDocumentResult.setLabels(new ListUnmarshaller<DocumentLabel>(
                        DocumentLabelJsonUnmarshaller.getInstance()
                        )
                                .unmarshall(context));
            } else if (name.equals("DocumentMetadata")) {
                classifyDocumentResult.setDocumentMetadata(DocumentMetadataJsonUnmarshaller
                        .getInstance()
                        .unmarshall(context));
            } else if (name.equals("DocumentType")) {
                classifyDocumentResult.setDocumentType(new ListUnmarshaller<DocumentTypeListItem>(
                        DocumentTypeListItemJsonUnmarshaller.getInstance()
                        )
                                .unmarshall(context));
            } else if (name.equals("Errors")) {
                classifyDocumentResult.setErrors(new ListUnmarshaller<ErrorsListItem>(
                        ErrorsListItemJsonUnmarshaller.getInstance()
                        )
                                .unmarshall(context));
            } else if (name.equals("Warnings")) {
                classifyDocumentResult.setWarnings(new ListUnmarshaller<WarningsListItem>(
                        WarningsListItemJsonUnmarshaller.getInstance()
                        )
                                .unmarshall(context));
            } else {
                reader.skipValue();
            }
        }
        reader.endObject();

        return classifyDocumentResult;
    }

    private static ClassifyDocumentResultJsonUnmarshaller instance;

    public static ClassifyDocumentResultJsonUnmarshaller getInstance() {
        if (instance == null)
            instance = new ClassifyDocumentResultJsonUnmarshaller();
        return instance;
    }
}
